package com.un.ebs.customer.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.un.ebs.core.enums.BooleanEnum;
import com.un.ebs.customer.domain.CustomerTrace;
import com.un.ebs.customer.domain.CustomerTraceBookExt;
import com.un.ebs.customer.domain.CustomerTraceExt;
import com.un.ebs.customer.dto.CustomerBookDto;
import com.un.ebs.customer.dto.CustomerBookRequest;
import com.un.ebs.customer.dto.CustomerTraceAddDto;
import com.un.ebs.product.dto.ProductCanBookSpuTimeResponse;

import java.util.Date;
import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author liubo
 * @since 2019-09-24
 */
public interface CustomerTraceService {

    /**
     * 创建一个客户事件
     *
     * @param req
     */
    String add(CustomerTraceAddDto req);

    /**
     * 创建一个常规的预约
     *
     * @param custId
     * @param dictType
     * @param time
     * @param bookDesc
     */
    String addBook(String custId, String dictType, Date time, String bookDesc);

    /**
     * 创建预约
     *
     * @param req
     */
    String addBook(CustomerBookRequest req);

    /**
     * 根据预约创建订单
     *
     * @param bookId
     * @return
     */
    String createOrderByBook(String bookId, String skuId, String tombSkuId, Integer qty);

    /**
     * 修改预约
     *
     * @param traceId
     * @param time
     * @param bookDesc
     */
    void updateBookTime(String traceId, Date time, String bookDesc);

    /**
     * 客服回复
     *
     * @param traceId
     * @param remark
     */
    void reply(String traceId, String remark);

    /**
     * 回访记录
     * @param traceId
     * @param remark
     */
    void visit(String traceId,String remark);

    /**
     * 查询客户名下的预约记录
     *
     * @param custId
     * @return
     */
    List<CustomerBookDto> queryBook(String custId);

    CustomerTraceBookExt queryBookByTrace(String traceId);

    IPage<CustomerTraceBookExt> queryAllBook(String searchText, int pageSize, int pageIndex);

    List<ProductCanBookSpuTimeResponse> queryCanBookSpu(String spuId, Date day);

    /**
     * 预约取消
     *
     * @param traceId
     * @param remark
     */
    void cancelBook(String traceId, String remark);

    /**
     * 预约关闭
     *
     * @param traceId
     */
    void completeBook(String traceId);

    /**
     * @param id
     * @return
     */
    CustomerTrace queryById(String id);

    CustomerTraceExt queryViewById(String id);

    /**
     * @param id
     * @return
     */
    List<CustomerTraceExt> queryByCustId(String id);

    /**
     * 根据 traceDict查询列表
     *
     * @param customerId
     * @param traceDict
     * @return
     */
    IPage<CustomerTraceExt> queryByTraceType(String customerId, String traceDict, BooleanEnum isPlan, int pageSize, int pageIndex);

    /**
     * @param ids
     * @return
     */
    List<CustomerTraceExt> queryByCustId(List<String> ids);

}
